package com.egreen.order.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.egreen.common.pojo.DTO.order.AcceptOrderDTO;
import com.egreen.common.pojo.DTO.order.CommitOrderDTO;
import com.egreen.common.pojo.VO.order.AgentOrderVO;
import com.egreen.common.pojo.VO.order.GetallOrderVO;
import com.egreen.common.pojo.entity.order.Order;

import java.math.BigDecimal;
import java.util.List;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author cloudJiang
 * @since 2022-07-16
 */
public interface IOrderService extends IService<Order> {
    /**
     * 用户第一次发布订单，此时订单状态为0待接
     *
     * @return 成功返回0, 否则返回1
     */
    // todo 修改该接口为可处理多个物品类型
    void commitOrder(CommitOrderDTO commitOrderDTO);

    /**
     * 代理商获取附近可以接受的订单，获取范围取决于等级
     *
     * @return
     */
    List<AgentOrderVO> getNearbyOrder(Integer state, Long locationId);

    /**
     * @param userId 用户id
     * @param states 订单状态
     * @return
     */
    List<GetallOrderVO> getAllOrder(Long userId, Integer states);

    /**
     * 用户提交订单异常，更改订单状态为4，错误信息必填。
     *
     * @return 成功返回0，错误信息字段空返回1
     */
    void commitErrorOrder(Long id, String errorMessage);

    /**
     * 用户接受并完成当前订单，将订单状态修改为2，
     * 并填入正确的物品重量（singlePrice），此时order中计算totalPrice并填入字段
     *
     * @param id
     * @param weight
     */
    void overOrder(Long id, BigDecimal weight);

    /**
     * 根据订单id结束订单
     *
     * @param id
     */
    void endOrder(Long id);

    /**
     * 处理异常订单
     *
     * @param orderId
     */
    void handleErrorOrder(Long orderId);

    /**
     * 接受订单
     * @param
     */
    void acceptOrders(AcceptOrderDTO acceptOrderDTO);

}
